As the speed and size of networked computer systems increases, the amount of data stored in and exchanged among such systems also increases. Although effort has been focused on developing larger and denser storage devices and faster networking technologies, continually increasing demand for storage space and networking bandwidth has led to the development of technologies that further optimize storage space and bandwidth currently available on existing storage devices and networks. One such technology is data compression, in which data are modified to reduce the number of bytes required to represent the data. Accordingly, data compression may reduce the size and bandwidth required to store and/or transmit data.
One data compression technique is the Lempel-Ziv-Markov chain algorithm (LZMA). The LZMA algorithm includes a Lempel-Ziv front-end and a Range Encoder back-end. The Lempel-Ziv front-end looks for repetitions in the incoming file, and replaces repetitions with short pointers to the previous occurrence of that text. The Range Encoder encodes the individual bits and bytes using the statistics and likelihoods of individual values within the file. LZMA algorithms typically are implemented in software.